#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/*
 *
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。



示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:

输入: strs = [""]
输出: [[""]]
示例 3:

输入: strs = ["a"]
输出: [["a"]]
 *
 *
 * */

//todo 这个题我还是剽窃思路了 原来想直接暴力呢
vector<vector<string>> groupAnagrams(vector<string> &strs) {
    vector<vector<string>> res;

    unordered_map<string, vector<string>> mp;//排序后字符串作为key 原始字符串作为val
    for (auto &item:strs) {
        auto val = item;
        sort(item.begin(), item.end());
        mp[item].emplace_back(val);

    }

    for (auto &item :mp) {
        res.emplace_back(item.second);
    }


    return res;

}